﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ForrajeriaDB;
using ForrajeriaBCL;


namespace ForrajeriaFRONT.ABM
{
    public partial class Cliente : System.Web.UI.Page
    {

        private ClienteBCL objBC;
        private ClienteMO objEditar;
        private LocalidadBCL loc;

        public Cliente()    //Constructor
        {
            objBC = new ClienteBCL();
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                ddlTipoDocumento.Items.Add(new ListItem("Seleccione", "0"));
                TipoDocumentoBCL objTipoDocumento = new TipoDocumentoBCL();
                List<TipoDocumentoMO> listaTipoDocumento = objTipoDocumento.GetAll();

                foreach (TipoDocumentoMO aux in listaTipoDocumento)
                {
                    ddlTipoDocumento.Items.Add(new ListItem(aux.TipoDocumento1, aux.Codigo.ToString()));
                }
                ddlTipoDocumento.DataBind();

                ddlProvincia.Items.Add(new ListItem("-- Seleccione --", "0"));
                ProvinciaBCL objProvincia = new ProvinciaBCL();
                List<ProvinciaMO> listaProvincia = objProvincia.GetALL();

                foreach (ProvinciaMO aux in listaProvincia)
                {
                    ddlProvincia.Items.Add(new ListItem(aux.Nombre, aux.CodigoProvincia.ToString()));
                }
                ddlProvincia.DataBind();
                ddlProvincia.SelectedIndex = 0;

                modoVentana("bloqueado");

            }
        }
       
        
        protected void cargarLista()
        {
            List<ClienteMO> lista = objBC.GetAll();

            string [,] mostrar = new string[3,13];
            mostrar.Initialize();


            // CABECERA DE LAS COLUMNAS QUE SE MUESTRAN
           
            mostrar[0, 1] = "Nombre";
            mostrar[0, 2] = "Apellido";
            mostrar[0, 6] = "Documento";
            mostrar[0, 11] = "Localidad";
            mostrar[0, 12] = "Usuario";

            //COLUMNAS A MOSTRAR ---------- Se setea en 1 la columna 1 de las filas que queremos mostrar

            mostrar[1, 1] = "1";
            mostrar[1, 2] = "1";
            mostrar[1, 6] = "1";
            mostrar[1, 11] = "1";
            mostrar[1, 12] = "1";

            //CAMPOS DATAFIELD ---------- Todos los campos como se encuentrar en la base de datos

            mostrar[2, 0] = "codigo";
            mostrar[2, 1] = "NombreCliente";
            mostrar[2, 2] = "ApellidoCliente";
            mostrar[2, 3] = "telefono";
            mostrar[2, 4] = "estadoClie";
            mostrar[2, 5] = "TipoDocumento";
            mostrar[2, 6] = "NumeroDocumento";
            mostrar[2, 7] = "calle";
            mostrar[2, 8] = "NumeroCalle";
            mostrar[2, 9] = "piso";
            mostrar[2, 10] = "departamento";
            mostrar[2, 11] = "localidad";
            mostrar[2, 12] = "usuario";


            usrBusqueda.initi(lista,mostrar,"ClienteMO");
        }

       

        protected void onRowSelected(Dictionary<string, string> objReto) //Cuando se selecciona una fila de la grilla creada genera un objeto y carga los datos en los campos...
        {
            objEditar = new ClienteMO();

            objEditar.Codigo = int.Parse(objReto["codigo"]);
            objEditar.NombreCliente = objReto["NombreCliente"];
            objEditar.ApellidoCliente = objReto["ApellidoCliente"];
            objEditar.Telefono = objReto["telefono"];
            objEditar.TipoDocumento = int.Parse(objReto["TipoDocumento"]);
            objEditar.NumeroDocumento = int.Parse(objReto["NumeroDocumento"]);
            if (objReto["usuario"] != "")
                objEditar.Usuario = int.Parse(objReto["usuario"]);
            else
                objEditar.Usuario = null;
            
            objEditar.EstadoClie = objReto["estadoClie"];
            objEditar.Calle = objReto["calle"];
            if (objReto["NumeroCalle"] != "")
                objEditar.NumeroCalle = int.Parse(objReto["NumeroCalle"]);
            else
                objEditar.NumeroCalle = null;

            objEditar.Piso = objReto["piso"];
            objEditar.Departamento = objReto["departamento"];

              if (objReto["localidad"] != "")
                objEditar.Localidad = int.Parse(objReto["localidad"]);
            else
                objEditar.Localidad = null;
            
           
            ViewState["objEditar"] = objEditar;


            txtNombre.Text = objEditar.NombreCliente;
            txtApellido.Text = objEditar.ApellidoCliente;
            txtNroDocumento.Text = objEditar.NumeroDocumento.ToString();
            ddlTipoDocumento.SelectedValue = objEditar.TipoDocumento.ToString();
            txtTelefono.Text = objEditar.Telefono;
            txtCalle.Text = objEditar.Calle;
            txtNumeroCalle.Text = objEditar.NumeroCalle.ToString();
            txtPiso.Text = objEditar.Piso.ToString();
            txtDepartamento.Text = objEditar.Departamento.ToString();

            int provincia = obtenerProvincia(int.Parse(objEditar.Localidad.ToString()));

            ddlProvincia.SelectedValue = provincia.ToString();
            ddlProvincia_SelectedIndexChanged(null, null);
            ddlLocalidad.SelectedValue = objEditar.Localidad.ToString();

            ddlLocalidad.Enabled = false;



            
        }

        protected int obtenerProvincia(int codLoc)
        {
            loc = new LocalidadBCL();
            return loc.GetProvinciaDeLocalidad(codLoc);
        }
        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            modoVentana("nuevo");
            ViewState["objEditar"] = null;
            
        }
        protected void btnBuscar_Click(object sender, EventArgs e)
        {
            modoVentana("busqueda");//Bloquea la ventana segun los parametros pasados para la opcion busqueda en el metodo modo ventana
            cargarLista();//Genera la Grilla
            pnlModal_ModalPopupExtender.Show();
        }
        protected void btnEditar_Click(object sender, EventArgs e)
        {
            modoVentana("edicion");
        }


        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            objEditar = (ClienteMO)ViewState["objEditar"];
            if (objEditar == null)
            {
                mensaje.ForeColor = System.Drawing.Color.Red;
                valSumary.ShowSummary = true;
                mensaje.Text = "No hay nada par borrar";
            }
            else
            {
                ClienteMO objNuevo = new ClienteMO();

                objNuevo.ApellidoCliente = txtApellido.Text;
                objNuevo.NombreCliente = txtNombre.Text;
                objNuevo.NumeroDocumento = int.Parse(txtNroDocumento.Text);
                objNuevo.Telefono = txtTelefono.Text;
                objNuevo.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedValue);
                objNuevo.EstadoClie = "B";
                objNuevo.Calle = txtCalle.Text;
                objNuevo.NumeroCalle = int.Parse(txtNumeroCalle.Text);
                objNuevo.Piso = txtPiso.Text;
                objNuevo.Departamento = txtDepartamento.Text;
                objNuevo.Localidad = int.Parse(ddlLocalidad.SelectedValue);

                string resu;
                resu = objBC.Actualizar(objNuevo, objEditar);
               
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Eliminado Con exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }
                
            }
            ViewState["objEdiar"] = null;
            modoVentana("bloqueado");
            mensaje.Visible = true;
        }

        protected void btnGuardar_Click(object sender, EventArgs e)
        {
            objEditar = (ClienteMO)ViewState["objEditar"];

            if (objEditar == null)
            {
                objEditar = new ClienteMO();

                objEditar.ApellidoCliente = txtApellido.Text;
                objEditar.NombreCliente = txtNombre.Text;
                objEditar.NumeroDocumento = int.Parse(txtNroDocumento.Text);
                objEditar.Telefono = txtTelefono.Text;
                objEditar.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedValue);
                objEditar.EstadoClie = "A";
                objEditar.Calle = txtCalle.Text;
                objEditar.NumeroCalle = int.Parse(txtNumeroCalle.Text);
                objEditar.Piso = txtPiso.Text;
                objEditar.Departamento = txtDepartamento.Text;
                objEditar.Localidad = int.Parse(ddlLocalidad.SelectedValue);


                string resu;
                resu = objBC.Adicionar(objEditar);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";
                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }

                modoVentana("bloqueado");
            }
            else
            {
                ClienteMO objNuevo = new ClienteMO();

                objNuevo.ApellidoCliente = txtApellido.Text;
                objNuevo.NombreCliente = txtNombre.Text;
                objNuevo.NumeroDocumento = int.Parse(txtNroDocumento.Text);
                objNuevo.Telefono = txtTelefono.Text;
                objNuevo.TipoDocumento = int.Parse(ddlTipoDocumento.SelectedValue);
                objNuevo.EstadoClie = "A";
                objNuevo.Calle = txtCalle.Text;
                objNuevo.NumeroCalle = int.Parse(txtNumeroCalle.Text);
                objNuevo.Piso = txtPiso.Text;
                objNuevo.Departamento = txtDepartamento.Text;
                objNuevo.Localidad = int.Parse(ddlLocalidad.SelectedValue);

                string resu;
                resu = objBC.Actualizar(objNuevo, objEditar);
                if (resu == "1")
                {
                    mensaje.ForeColor = System.Drawing.Color.Blue;
                    valSumary.ShowSummary = true;
                    mensaje.Text = "Guardado con Exito";

                }
                else
                {
                    mensaje.ForeColor = System.Drawing.Color.Red;
                    valSumary.ShowSummary = true;
                    mensaje.Text = resu;

                }

            }

            ViewState["objEdiar"] = null;
            modoVentana("bloqueado");
            mensaje.Visible = true;

        }
        #region control de controles
        protected void ddlProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlLocalidad.Enabled = false;
            ddlLocalidad.Items.Clear();

            if (ddlProvincia.SelectedIndex != 0)
            {
                ddlLocalidad.Items.Add(new ListItem("-- Seleccione --", "0"));
                LocalidadBCL objLoc = new LocalidadBCL();
                List<LocalidadMO> listaLocalidad = objLoc.GetAll(int.Parse(ddlProvincia.SelectedValue));

                foreach (LocalidadMO aux in listaLocalidad)
                {
                    ddlLocalidad.Items.Add(new ListItem(aux.Nombre, aux.Id_localidad.ToString()));
                }
                ddlLocalidad.DataBind();
                ddlLocalidad.Enabled = true;
            }
        }

        protected void cus_TipoDocumento_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlTipoDocumento.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }

        protected void cus_Provincia_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlProvincia.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }

        protected void cus_Localidad_ServerValidate(object source, ServerValidateEventArgs args)
        {
            if (ddlLocalidad.SelectedIndex >= 1)
            {
                args.IsValid = true;
            }
            else
            {
                args.IsValid = false;
            }

        }
        #endregion 
        #region Control de Ventana
        public void CleanControl(ControlCollection controles) // Limpia los controles, recibe por parametros una coleccion de controles, los recorre y los limpia
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    CleanControl(control.Controls);
            }
        }
        public void ControlState(ControlCollection controles, Boolean estado) // Habilita o deshabilita la pantalla, para eso recibe la coleccion de controles de la pantalla y un estado el cual setea la funcion "Enabled"
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Enabled = estado;
                else if (control is DropDownList)
                    ((DropDownList)control).Enabled = estado;
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).Enabled = estado;
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).Enabled = estado;
                else if (control is RadioButton)
                    ((RadioButton)control).Enabled = estado;
                else if (control is CheckBox)
                    ((CheckBox)control).Enabled = estado;
                else if (control.HasControls())
                    ControlState(control.Controls, estado);
            }
        }
        protected void modoVentana(string modo)
        {
            switch (modo)
            {
                case "nuevo":
                    CleanControl(this.Controls);//Se le envia al metodo clearControl los controles para que los limpie
                    ControlState(this.Controls, true);//Se setea el estado en true para permitir la edicion
                    mensaje.Visible = false;
                    break;
                case "busqueda":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);//Se setea el estado en false para que no se pueda editar
                    mensaje.Visible = false;
                    break;
                case "edicion"://En la edicion no se debe usar el metodo CLeanControl
                    ControlState(this.Controls, true);
                    mensaje.Visible = false;
                    break;
                case "bloqueado":
                    CleanControl(this.Controls);
                    ControlState(this.Controls, false);
                    break;

            }

        }
        #endregion 
    }
}
